home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / gfx / misc / FractalDynamics.lha / FractalDynamics12.s < prev   
Text File  |  1991-09-05  |  39KB  |  2,429 lines

  1. ;Mandelbrot generator PRO
  2. ;Last modification 5 november 1990 - 0H17
  3. ;V1.1 modified 18 february 1991
  4. ;V1.2 modified 17 august 1991
  5. VERSION = '1.2 '
  6.  
  7. HardKbd = $bfec01
  8. HardKbdESC = $75
  9. HardMouse = $bfe001
  10. HardMouseButton = 6
  11.  
  12. OpenLibrary = -552
  13. CloseLibrary = -414
  14. FindTask = -294
  15. GetMsg = -372
  16. WaitPort = -384 
  17. Forbid = -132
  18. ReplyMsg = -378
  19. AllocMem = -198 
  20. FreeMem = -210
  21. Wait = -318
  22.  
  23. pr_CLI = $ac
  24. pr_MsgPort = $5c
  25. sm_ArgList = $24
  26. pr_WindowPtr = $b8
  27.  
  28. OpenScreen = -198
  29. OpenWindow = -204
  30. CloseScreen = -66
  31. CloseWindow = -72
  32. SetMenuStrip = -264
  33. ClearMenuStrip = -54
  34. PrintIText = -216
  35. SetWindowTitles = -276
  36. ScreenToFront = -252
  37.  
  38. LoadRGB4 = -192
  39. SetAPen = -342
  40. RectFill = -306
  41. SetDrMd = -354
  42. Move = -240
  43. Draw = -246
  44.  
  45. SPFix =-30
  46. SPFlt =-36
  47. SPCmp =-42
  48. SPAdd =-66
  49. SPSub =-72
  50. SPMul =-78
  51. SPDiv =-84
  52. SPNeg =-60
  53.  
  54. Open = -30
  55. Write = -48
  56. Close = -36
  57. CurrentDir = -126
  58.  
  59. FileRequest = -294
  60.  
  61. Real316 = $9e000049
  62. Real178 = $b2000048
  63. Real80 = $a0000047
  64. Real50 = $c8000046
  65. Real2 = $80000042
  66. Realm2 = $800000C2
  67. Real4 = $80000043
  68. Real10 = $A0000044
  69.  
  70.  SECTION interet,CODE
  71.  
  72.  move.l 4,a6
  73.  lea IntuitionName,a1
  74.  moveq.l #0,d0
  75.  jsr OpenLibrary(a6)
  76.  move.l d0,IntuitionLib
  77.  lea GfxName,a1
  78.  moveq.l #0,d0
  79.  jsr OpenLibrary(a6)
  80.  move.l d0,GfxLib
  81.  lea FFPName,a1
  82.  moveq.l #0,d0
  83.  jsr OpenLibrary(a6)
  84.  move.l d0,FFPLib
  85.  lea DosName,a1
  86.  moveq.l #0,d0
  87.  jsr OpenLibrary(a6)
  88.  move.l d0,DosLib
  89.  lea ArpName,a1
  90.  moveq.l #33,d0
  91.  jsr OpenLibrary(a6)
  92.  move.l d0,ArpLib
  93.  
  94. ;V0.99 change : no more bugs
  95. ;while saving under WB
  96.  sub.l a1,a1
  97.  jsr FindTask(a6)
  98.  move.l d0,a4
  99.  move.l d0,MyTask
  100.  tst.l pr_CLI(a4)
  101.  bne FromCLI
  102.  lea pr_MsgPort(a4),a0
  103.  jsr WaitPort(a6)
  104.  lea pr_MsgPort(a4),a0
  105.  jsr GetMsg(a6)
  106.  move.l d0,WB_Message
  107.  move.l d0,a0 
  108.  move.l sm_ArgList(a0),a0
  109.  cmp.l #0,a0
  110.  beq.s Ende_StartUp
  111.  move.l (a0),d1
  112.  move.l DosLib,a6
  113.  jsr CurrentDir(a6) 
  114.  
  115. Ende_StartUp:
  116. FromCLI:
  117.  move.l IntuitionLib,a6
  118.  lea ScreenDefs,a0
  119.  jsr OpenScreen(a6)
  120.  move.l d0,ScreenHandler
  121.  move.l d0,ScreenHandler2
  122.  move.l d0,ScreenHandler3
  123.  move.l d0,ScreenHandler4
  124.  lea WindowDefs,a0
  125.  jsr OpenWindow(a6)
  126.  move.l d0,WindowHandler
  127.  move.l d0,a0
  128.  move.l d0,ArpRequest+12
  129.  move.l 50(a0),RastPort
  130.  lea Menu00,a1
  131.  jsr SetMenuStrip(a6)
  132. ;V1.1 change : system messages on my window
  133.  move.l MyTask,a0
  134.  move.l pr_WindowPtr(a0),OldFashion
  135.  move.l WindowHandler,pr_WindowPtr(a0)
  136.  
  137. ;V0.8 change : colors included
  138.  move.l GfxLib,a6
  139.  move.l ScreenHandler,a0
  140.  add.l #44,a0
  141.  lea Palette1,a1
  142.  move.l #32,d0
  143.  jsr LoadRGB4(a6)
  144.   
  145.  bsr Info
  146.  
  147. ;V0.2 change : wait a menu to start
  148. WaitMenu:
  149.  move.l 4,a6
  150. ChoiceNotOK:
  151.  move.l WindowHandler,a0
  152.  move.l 86(a0),a0
  153.  jsr GetMsg(a6)
  154.  tst.l d0
  155.  bne ChoiceOK
  156.  move.l WindowHandler,a0
  157.  move.l 86(A0),a0
  158.  moveq.l #0,d1
  159.  move.b 15(A0),d1
  160.  moveq.l #1,d0
  161.  asl.l d1,d0
  162.  jsr Wait(A6)
  163.  bra ChoiceNotOK
  164. ChoiceOK: 
  165.  move.l d0,a1
  166.  move.w 24(a1),d0
  167.  move.w d0,-(sp)
  168.  jsr ReplyMsg(a6)
  169.  move.w (sp)+,d0
  170.  cmpi.w #-1,d0
  171.  beq ChoiceNotOK
  172.  move.w d0,d1
  173.  andi.w #$1f,d0
  174.  lsr.w #5,d1
  175.  andi.w #$3f,d1
  176.  cmpi.w #4,d0
  177.  beq Picture
  178.  cmpi.w #3,d0
  179.  beq Colors
  180.  cmpi.w #2,d0
  181.  beq Zoom
  182.  cmpi.w #1,d0
  183.  beq Set
  184. Project:
  185.  cmpi.w #4,d1
  186.  beq End 
  187.  cmpi.w #2,d1
  188.  beq Generate
  189.  cmpi.w #0,d1
  190.  beq Save
  191.  bsr Info
  192.  bra WaitMenu
  193. Set:
  194.  cmpi.w #1,d1
  195.  beq Julia
  196.  bra Mandelbrot
  197. Zoom:
  198.  cmpi.w #1,d1
  199.  beq Manual
  200.  bsr OnScreen  
  201.  bra WaitMenu
  202. Picture:
  203.  cmpi.w #1,d1
  204.  beq Small
  205.  bra Large
  206. Colors:
  207.  cmpi.w #2,d1
  208.  beq RedBlue
  209.  cmpi.w #1,d1
  210.  beq GreenBlue
  211.  bra Rainbow
  212.  
  213. Save:
  214.  bsr SaveILBM
  215.  bra WaitMenu
  216. Stop:
  217.  bsr Info
  218.  bra WaitMenu
  219. Mandelbrot:
  220.  tst.b JuliaFlag
  221.  beq MandelbrotOK
  222.  move.b #1,Menu11+12
  223.  bra WaitMenu
  224. MandelbrotOK: 
  225.  move.l IntuitionLib,a6
  226.  move.l WindowHandler,a0
  227.  jsr ClearMenuStrip(a6)
  228.  clr.b Menu12+12
  229.  move.b #-1,JuliaFlag
  230.  move.l WindowHandler,a0
  231.  lea Menu00,a1
  232.  jsr SetMenuStrip(a6)
  233.  lea SoundOfTwo,a0
  234.  lea MinX,a1
  235.  lea MinY,a2
  236.  lea MaxX,a3
  237.  lea MaxY,a4
  238.  moveq.w #9,d0
  239. CopyLoop:
  240.      move.b (a0),(a1)+
  241.      move.b (a0),(a2)+
  242.      move.b (a0),(a3)+
  243.      move.b (a0)+,(a4)+
  244.  dbra d0,CopyLoop
  245.  move.b #'-',MinX
  246.  move.b #'-',MinY
  247. ;v1.1 change : no more self modifying source
  248. ; lea ComputeMandelPoint,a0
  249. ; move.l a0,HereJSR+2
  250.  move.l WindowHandler,a0
  251.  lea TitreEcran,a2
  252.  lea TitreFenetre2,a1
  253.  jsr SetWindowTitles(a6)
  254.  clr.b ZoomFlag
  255.  bra WaitMenu
  256.  
  257. Julia:
  258.  tst.b JuliaFlag
  259.  bne JuliaOK
  260.  move.b #1,Menu12+12
  261.  bra WaitMenu
  262. JuliaOK: 
  263.  move.l IntuitionLib,a6
  264.  move.l WindowHandler,a0
  265.  jsr ClearMenuStrip(a6)
  266.  clr.b Menu11+12
  267.  clr.b JuliaFlag
  268.  move.l WindowHandler,a0
  269.  lea Menu00,a1
  270.  jsr SetMenuStrip(a6)
  271.  lea SoundOfTwo,a0
  272.  lea MinX,a1
  273.  lea MinY,a2
  274.  lea MaxX,a3
  275.  lea MaxY,a4
  276.  moveq.w #9,d0
  277. JuliaCopyLoop:
  278.      move.b (a0),(a1)+
  279.      move.b (a0),(a2)+
  280.      move.b (a0),(a3)+
  281.      move.b (a0)+,(a4)+
  282.  dbra d0,JuliaCopyLoop
  283.  move.b #'-',MinX
  284.  move.b #'-',MinY
  285. ; lea ComputeJuliaPoint,a0
  286. ; move.l a0,HereJSR+2
  287.  move.l WindowHandler,a0
  288.  lea TitreEcran,a2
  289.  lea TitreFenetre1,a1
  290.  jsr SetWindowTitles(a6)
  291.  clr.b ZoomFlag
  292.  
  293. JuliaGo:
  294.  move.l IntuitionLib,a6
  295.  lea JuliaWindowDefs,a0
  296.  jsr OpenWindow(a6)
  297.  move.l d0,JuliaWindowHandler
  298.  move.l 4,a6
  299. JuliaNotOK:
  300.  move.l JuliaWindowHandler,a0
  301.  move.l 86(a0),a0
  302.  jsr GetMsg(a6)
  303.  tst.l d0
  304.  bne Julia_OK
  305.  move.l JuliaWindowHandler,a0
  306.  move.l 86(a0),a0
  307.  moveq.l #0,d1
  308.  move.b 15(a0),d1
  309.  moveq.l #1,d0
  310.  asl.l d1,d0
  311.  jsr Wait(A6)
  312.  bra JuliaNotOK
  313. Julia_OK: 
  314.  move.l d0,a1
  315.  move.l 28(a1),a0
  316.  move.w $26(a0),d6
  317.  jsr ReplyMsg(a6)
  318.  cmpi.w #1,d6
  319.  beq JuliaEnd
  320.  cmpi.w #2,d6
  321.  bne JuliaNotOK
  322. ;JuliaOnScreen:
  323.  move.l JuliaWindowHandler,a0
  324.  move.l IntuitionLib,a6
  325.  jsr CloseWindow(a6)
  326.  move.l WindowHandler,a0
  327. JuliaOSWait:
  328.  btst #HardMouseButton,HardMouse
  329.  bne JuliaOSWait
  330. JuliaOSWait2:
  331.  btst #HardMouseButton,HardMouse
  332.  bne JuliaOSWait2
  333.  bsr GetCoords
  334.  sub.w ScrMinX+2,d0
  335.  sub.w ScrMinY+2,d1
  336.  move.w d0,d6
  337.  move.w d1,d7
  338.  and.l #$ffff,d6
  339.  and.l #$ffff,d7
  340.  move.l FFPLib,a6
  341.  move.l RealMaxX,d0
  342.  move.l RealMinX,d1
  343.  jsr SPSub(a6)
  344.  move.l RealXSize,d1
  345.  jsr SPDiv(a6)
  346.  move.l d0,d5
  347.  move.l d6,d0
  348.  jsr SPFlt(a6)
  349.  move.l d5,d1
  350.  jsr SPMul(a6)
  351.  move.l RealMinX,d1
  352.  jsr SPAdd(a6)
  353.  move.l d0,RealAA
  354.  lea AA,a0
  355.  bsr FFPTOS
  356.  move.l RealMaxY,d0
  357.  move.l RealMinY,d1
  358.  jsr SPSub(a6)
  359.  move.l RealYSize,d1
  360.  jsr SPDiv(a6)
  361.  move.l d0,d5
  362.  move.l d7,d0
  363.  jsr SPFlt(a6)
  364.  move.l d5,d1
  365.  jsr SPMul(a6)
  366.  move.l RealMinY,d1
  367.  jsr SPAdd(a6)
  368.  move.l d0,RealOO
  369.  lea OO,a0
  370.  bsr FFPTOS
  371.  bra JuliaGo
  372.  
  373. JuliaEnd:
  374.  move.l FFPLib,a6
  375.  lea OO,a0
  376.  bsr STOFFP
  377.  move.l d0,RealOO
  378.  lea AA,a0
  379.  bsr STOFFP
  380.  move.l d0,RealAA
  381.  move.l IntuitionLib,a6
  382.  move.l JuliaWindowHandler,a0
  383.  jsr CloseWindow(a6)
  384.  bra WaitMenu
  385.  
  386. Small:
  387.  move.b #1,Menu42+12
  388.  clr.b Menu41+12
  389.  clr.b SmallFlag
  390.  bra WaitMenu
  391.  
  392. Large:
  393.  move.b #1,Menu41+12
  394.  clr.b Menu42+12
  395.  move.b #-1,SmallFlag
  396.  bra WaitMenu
  397.  
  398. Rainbow:
  399.  move.b #1,Menu31+12
  400.  tst.b ColorFlag
  401.  beq WaitMenu
  402.  clr.b Menu32+12
  403.  clr.b Menu33+12
  404.  move.l GfxLib,a6
  405.  move.l ScreenHandler,a0
  406.  add.l #44,a0
  407.  lea Palette1,a1
  408.  move.l #32,d0
  409.  jsr LoadRGB4(a6)
  410.  clr.b ColorFlag
  411.  bra WaitMenu
  412.  
  413. GreenBlue:
  414.  move.b #1,Menu32+12
  415.  cmpi.b #1,ColorFlag
  416.  beq WaitMenu
  417.  clr.b Menu31+12
  418.  clr.b Menu33+12
  419.  move.l GfxLib,a6
  420.  move.l ScreenHandler,a0
  421.  add.l #44,a0
  422.  lea Palette2,a1
  423.  move.l #32,d0
  424.  jsr LoadRGB4(a6)
  425.  move.b #1,ColorFlag
  426.  bra WaitMenu
  427.  
  428. RedBlue:
  429.  move.b #1,Menu33+12
  430.  cmpi.b #2,ColorFlag
  431.  beq WaitMenu
  432.  clr.b Menu31+12
  433.  clr.b Menu32+12
  434.  move.l GfxLib,a6
  435.  move.l ScreenHandler,a0
  436.  add.l #44,a0
  437.  lea Palette3,a1
  438.  move.l #32,d0
  439.  jsr LoadRGB4(a6)
  440.  move.b #2,ColorFlag
  441.  bra WaitMenu
  442.   
  443. ;*******************************************
  444. ;*** Compute a whole picture ***************
  445. ;******************************************* 
  446. Generate:
  447.  move.l IntuitionLib,a6
  448.  move.l WindowHandler,a0
  449.  jsr ClearMenuStrip(a6)
  450.  
  451.  move.l GfxLib,a6
  452.  move.l RastPort,a1
  453.  moveq.l #0,d0
  454.  jsr SetAPen(a6)
  455.  move.l RastPort,a1
  456.  move.l #2,d0
  457.  move.l #10,d1
  458.  move.l #318,d2
  459.  move.l #188,d3
  460.  jsr RectFill(a6) 
  461.  
  462.  tst.b SmallFlag
  463.  bne LargePicture
  464.  move.l #120,ScrMinX
  465.  move.l #65,ScrMinY
  466.  move.l #200,ScrMaxX
  467.  move.l #115,ScrMaxY
  468.  move.l #Real80,RealXSize
  469.  move.l #Real50,RealYSize
  470.  bra SmallPicture
  471. LargePicture:
  472.  move.l #2,ScrMinX
  473.  move.l #10,ScrMinY
  474.  move.l #319,ScrMaxX
  475.  move.l #189,ScrMaxY
  476.  move.l #Real316,RealXSize
  477.  move.l #Real178,RealYSize
  478. SmallPicture:
  479.  
  480.  move.l FFPLib,a6
  481.  tst.b ZoomFlag
  482.  bne RealBorns
  483.  lea MaxX,a0
  484.  bsr STOFFP
  485.  move.l d0,RealMaxX
  486.  lea MaxY,a0
  487.  bsr STOFFP
  488.  move.l d0,RealMaxY
  489.  lea MinX,a0
  490.  bsr STOFFP
  491.  move.l d0,RealMinX
  492.  lea MinY,a0
  493.  bsr STOFFP
  494.  move.l d0,RealMinY
  495.  bra AfterRealBorns
  496. RealBorns:
  497.  move.l ZoomMinX,RealMinX
  498.  move.l ZoomMinY,RealMinY
  499.  move.l ZoomMaxX,RealMaxX
  500.  move.l ZoomMaxY,RealMaxY
  501. AfterRealBorns: 
  502.  move.l RealMaxX,d0
  503.  move.l RealMinX,d1
  504.  jsr SPSub(a6)
  505.  move.l RealXSize,d1
  506.  jsr SPDiv(a6)
  507.  move.l d0,CoefTransX
  508.  
  509.  move.l RealMaxY,d0
  510.  move.l RealMinY,d1
  511.  jsr SPSub(a6)
  512.  move.l RealYSize,d1
  513.  jsr SPDiv(a6)
  514.  move.l d0,CoefTransY
  515.  
  516.  move.l ScrMinY,d1
  517. LoopY:
  518.  move.l ScrMinX,d0
  519. LoopX:
  520.  move.l FFPLib,a6
  521.  tst.b JuliaFlag
  522.  bne.s NotAJuliaSet
  523.  jsr ComputeJuliaPoint
  524.  bra.s WasAJuliaSet
  525. NotAJuliaSet:
  526.  jsr ComputeMandelPoint
  527. WasAJuliaSet: 
  528.  movem.l d0/d1,-(sp)
  529.  move.l RastPort,a0
  530.  move.w d4,d2
  531.  addq.w #1,d2
  532.  lsr.w #1,d2
  533.  jsr FastPlot(pc)
  534.  movem.l (sp)+,d0/d1
  535.  cmpi.b #HardKbdESC,HardKbd
  536.  beq EndGenerate
  537.  addq.l #1,d0
  538.  cmp.l ScrMaxX,d0
  539.  blt LoopX
  540.  addq.l #1,d1
  541.  cmp.l ScrMaxY,d1
  542.  blt LoopY
  543. EndGenerate:
  544.  move.l IntuitionLib,a6
  545.  move.l WindowHandler,a0
  546.  lea Menu00,a1
  547.  jsr SetMenuStrip(a6)
  548.  
  549.  move.l FFPLib,a6
  550.  move.l RealMaxX,d0
  551.  lea MaxX,a0
  552.  bsr FFPTOS
  553.  move.l RealMaxY,d0
  554.  lea MaxY,a0
  555.  bsr FFPTOS
  556.  move.l RealMinX,d0
  557.  lea MinX,a0
  558.  bsr FFPTOS
  559.  move.l RealMinY,d0
  560.  lea MinY,a0
  561.  bsr FFPTOS
  562.  move.l RealAA,d0
  563.  lea AA,a0
  564.  bsr FFPTOS
  565.  move.l RealOO,d0
  566.  lea OO,a0
  567.  bsr FFPTOS
  568.   
  569.  bra WaitMenu
  570.  
  571. ;*********************************************
  572. ;*** Finished : leave the prg. ***************
  573. ;*********************************************
  574. End:
  575.  move.l MyTask,a0
  576.  move.l OldFashion,pr_WindowPtr(a0)
  577.  move.l IntuitionLib,a6
  578.  move.l WindowHandler,a0
  579.  jsr ClearMenuStrip(a6)
  580.  move.l WindowHandler,a0
  581.  jsr CloseWindow(a6)
  582.  move.l ScreenHandler,a0
  583.  jsr CloseScreen(a6)
  584.  move.l a6,a1
  585.  move.l 4,a6
  586.  jsr CloseLibrary(a6)
  587.  move.l ArpLib,a1
  588.  cmp.l #0,a1
  589.  beq ThereWhereNoArp
  590.  jsr CloseLibrary(a6)
  591. ThereWhereNoArp:
  592.  move.l FFPLib,a1
  593.  jsr CloseLibrary(a6)
  594.  move.l GfxLib,a1
  595.  jsr CloseLibrary(a6)
  596.  move.l DosLib,a1
  597.  jsr CloseLibrary(a6)
  598.  tst.l WB_Message
  599.  beq.s NoStartWB
  600.  jsr Forbid(a6)
  601.  move.l WB_Message,a1
  602.  jsr ReplyMsg(a6)
  603. NoStartWB:
  604.  moveq.l #0,d0
  605.  rts
  606.  
  607. ;************************************************
  608. ;*** Compute one point of the Julia set *********
  609. ;************************************************
  610. ComputeJuliaPoint:
  611.  movem.l d0/d1,-(sp)
  612.  sub.l ScrMinX,d0
  613.  sub.l ScrMinY,d1
  614.  move.l d1,d7
  615.  jsr SPFlt(a6)
  616.  move.l CoefTransX,d1
  617.  jsr SPMul(a6)
  618.  move.l RealMinX,d1
  619.  jsr SPAdd(a6)
  620.  move.l d0,d6
  621.  move.l d7,d0
  622.  jsr SPFlt(a6)
  623.  move.l CoefTransY,d1
  624.  jsr SPMul(a6)
  625.  move.l RealMinY,d1
  626.  jsr SPAdd(a6)
  627.  move.l d0,d7
  628.  
  629.  moveq.l #63,d4
  630. loop:
  631.     move.l d7,d0
  632.     move.l d7,d1
  633.     jsr SPMul(a6) ;x*x
  634.     move.l d0,d5
  635.     move.l d6,d0
  636.     move.l d6,d1
  637.     jsr SPMul(a6) ;y*y
  638.     move.l d5,d1
  639.     jsr SPSub(a6) ;x^2-y^2
  640.     move.l RealAA,d1
  641.     jsr SPAdd(a6) ;x^2-y^2+AA
  642.     move.l d0,d5
  643.     
  644. ;    move.l #Real2,d0
  645. ;    move.l d6,d1
  646. ;    jsr SPMul(a6) ;2*x
  647.     move.l d6,d0
  648.     addq #1,d0
  649.     move.l d7,d1
  650.     jsr SPMul(a6) ;2*x*y
  651.     move.l RealOO,d1
  652.     jsr SPAdd(a6) ;2*x*y+OO
  653.     
  654.     move.l d0,d7
  655.     move.l d5,d6
  656.     
  657.     move.l d0,d1
  658.     jsr SPMul(a6) ;x^2
  659.     move.l d0,d5
  660.     move.l d7,d0
  661.     move.l d7,d1
  662.     jsr SPMul(a6) ;y^2 
  663.     move.l d5,d1
  664.     jsr SPAdd(a6) ;x^2+y^2
  665.     move.l #Real4,d1
  666.     jsr SPCmp(a6) ; <4 ?
  667.     cmpi.b #1,d0
  668.     bne EndOfLoop
  669.     dbra d4,loop
  670. EndOfLoop:
  671.  movem.l (sp)+,d0/d1
  672.  rts    
  673.  
  674. ;************************************************
  675. ;*** Compute one point of the Mandelbrot set ****
  676. ;************************************************
  677. ComputeMandelPoint:
  678.  movem.l d0/d1,-(sp)
  679.  sub.l ScrMinX,d0
  680.  sub.l ScrMinY,d1
  681.  move.l d1,d7
  682.  jsr SPFlt(a6)
  683.  move.l CoefTransX,d1
  684.  jsr SPMul(a6)
  685.  move.l RealMinX,d1
  686.  jsr SPAdd(a6)
  687.  move.l d0,RealR
  688.  move.l d7,d0
  689.  jsr SPFlt(a6)
  690.  move.l CoefTransY,d1
  691.  jsr SPMul(a6)
  692.  move.l RealMinY,d1
  693.  jsr SPAdd(a6)
  694.  move.l d0,RealI
  695.  
  696.  moveq.l #0,d6
  697.  moveq.l #0,d7
  698.  moveq.l #63,d4
  699. MandelLoop:
  700.     move.l d7,d0
  701.     move.l d7,d1
  702.     jsr SPMul(a6)    ;x*x
  703.     move.l d0,d5
  704.     move.l d6,d0
  705.     move.l d6,d1
  706.     jsr SPMul(a6)    ;y*y
  707.     move.l d5,d1
  708.     jsr SPSub(a6)    ;x^2-y^2
  709.     move.l RealR,d1
  710.     jsr SPAdd(a6)    ;x^2-y^2+R
  711.     move.l d0,d5
  712.     
  713. ;    move.l #Real2,d0
  714. ;    move.l d6,d1
  715. ;    jsr SPMul(a6)
  716.     move.l d6,d0    ; speedy code for
  717.     addq #1,d0      ; FFP * 2
  718.     move.l d7,d1
  719.     jsr SPMul(a6)
  720.     move.l RealI,d1
  721.     jsr SPAdd(a6)
  722.     
  723.     move.l d0,d7
  724.     move.l d5,d6
  725.     
  726.     move.l d0,d1
  727.     jsr SPMul(a6)
  728.     move.l d0,d5
  729.     move.l d7,d0
  730.     move.l d7,d1
  731.     jsr SPMul(a6)
  732.     move.l d5,d1
  733.     jsr SPAdd(a6)
  734.     move.l #Real4,d1
  735.     jsr SPCmp(a6)
  736.     cmpi.b #1,d0
  737.     bne EndOfMandelLoop
  738.     dbra d4,MandelLoop
  739. EndOfMandelLoop:
  740.  movem.l (sp)+,d0/d1
  741.  rts    
  742.  
  743. ;*************************************************************************
  744. ;*****    STOFFP(string) transform a string into a fast floating point  **
  745. ;*************************************************************************
  746. STOFFP:
  747.  movem.l d1/d2/d3,-(sp)
  748.  moveq.l #0,d0
  749.  moveq.l #1,d3
  750. STOFFP_Label:
  751.  cmpi.b #' ',(a0)
  752.  beq STOFFP_GoOn
  753.  cmpi.b #'+',(a0)
  754.  bne STOFFP_DontGoOn
  755. STOFFP_GoOn:
  756.  add.l #1,a0
  757.  bra STOFFP_Label
  758. STOFFP_DontGoOn: 
  759.  cmpi.b #'-',(a0) 
  760.  bne STOFFP_NoMinus
  761.  neg.l d3
  762.  add.l #1,a0
  763. STOFFP_NoMinus:
  764.  moveq.l #0,d2
  765. STOFFP_NoLuck:
  766.  move.b (a0)+,d2
  767.  tst.b d2
  768.  beq STOFFP_Finish
  769.  cmpi.b #' ',d2
  770.  beq STOFFP_NoLuck
  771.  cmpi.b #'.',d2
  772.  beq STOFFP_AfterPoint
  773.  move.l #Real10,d1
  774.  jsr SPMul(a6)
  775.  sub.b #'0',d2
  776.  exg.l d2,d0
  777.  jsr SPFlt(a6)
  778.  move.l d2,d1
  779.  jsr SPAdd(a6)
  780.  bra STOFFP_NoMinus
  781. STOFFP_AfterPoint:
  782.  move.l d0,-(sp)
  783.  moveq.l #0,d0
  784. STOFFP_loop1:
  785.  tst.b (a0)+
  786.  bne STOFFP_loop1
  787.  sub.l #1,a0
  788. STOFFP_loop2:
  789.  moveq.l #0,d2
  790.  move.b -(a0),d2
  791.  cmpi.b #'.',d2
  792.  beq STOFFP_EndAfterPoint
  793.  sub.b #'0',d2
  794.  exg.l d0,d2
  795.  jsr SPFlt(a6)
  796.  move.l d2,d1
  797.  jsr SPAdd(a6)
  798.  move.l #Real10,d1
  799.  jsr SPDiv(a6)
  800.  bra STOFFP_loop2
  801. STOFFP_EndAfterPoint:
  802.  move.l (sp)+,d1
  803.  jsr SPAdd(a6)
  804. STOFFP_Finish:
  805.  cmpi.b #-1,d3
  806.  bne.s STOFFP_Finished
  807.  jsr SPNeg(a6)
  808. STOFFP_Finished:
  809.  movem.l (sp)+,d1/d2/d3
  810.  rts   
  811.  
  812. ;**********************************************************************
  813. ;*** FFPTOS : transforms a fast floating point in a 10 chars string ***
  814. ;**********************************************************************
  815. FFPTOS:
  816.  move.l d0,d5
  817.  moveq.b #0,d6
  818.  moveq.b #0,d1
  819.  jsr SPCmp(a6)
  820.  cmpi.b #1,d0
  821.  bne FFPTOS_NotNeg
  822.  move.b #'-',(a0)+
  823.  addq.b #1,d6
  824.  move.l d5,d0
  825.  jsr SPNeg(a6)
  826.  move.l d0,d5
  827. FFPTOS_NotNeg:
  828.  move.l d5,d0
  829.  jsr SPFix(a6)
  830.  tst.l d0
  831.  beq FFPTOS_AfterPoint
  832.  move.l d0,d4
  833.  jsr SPFlt(a6)
  834.  move.l d0,d1
  835.  move.l d5,d0
  836.  jsr SPSub(a6)
  837.  move.l d0,d5
  838.  addi.b #'0',d4
  839.  move.b d4,(a0)+
  840.  addq.b #1,d6
  841. FFPTOS_AfterPoint:
  842.  move.b #'.',(a0)+
  843.  addq.b #1,d6
  844. FFPTOS_AfterPointLoop:
  845.  move.l d5,d0
  846.  move.l #Real10,d1
  847.  jsr SPMul(a6)
  848.  move.l d0,d5
  849.  jsr SPFix(a6)
  850.  move.l d0,d4
  851.  jsr SPFlt(a6)
  852.  move.l d5,d1
  853.  exg.l d0,d1
  854.  jsr SPSub(a6)
  855.  move.l d0,d5
  856.  addi.b #'0',d4
  857.  move.b d4,(a0)+
  858.  addq.b #1,d6
  859.  cmpi.b #9,d6
  860.  bne FFPTOS_AfterPointLoop
  861.  rts
  862.  
  863.  
  864. ;*********************************************************
  865. ;*** INFO : Put my name on *******************************
  866. ;*********************************************************
  867. Info:
  868.  movem.l d0-a6,-(sp)
  869.  clr.l OKGadget
  870.  move.l IntuitionLib,a6
  871.  lea InfoWindowDefs,a0
  872.  jsr OpenWindow(a6)
  873.  move.l d0,InfoWindowHandler
  874.  move.l d0,a0
  875.  move.l 50(a0),a0
  876.  lea InfoText,a1
  877.  moveq.l #10,d0
  878.  move.l d0,d1
  879.  jsr PrintIText(a6)
  880.  move.l 4,a6
  881. InfoNotOK:
  882.  move.l InfoWindowHandler,a0
  883.  move.l 86(a0),a0
  884.  jsr GetMsg(a6)
  885.  tst.l d0
  886.  bne InfoOK
  887.  move.l InfoWindowHandler,a0
  888.  move.l 86(A0),a0
  889.  moveq.l #0,d1
  890.  move.b 15(A0),d1
  891.  moveq.l #1,d0
  892.  asl.l d1,d0
  893.  jsr Wait(A6)
  894.  bra InfoNotOK
  895. InfoOK:
  896.  move.l d0,a1
  897.  jsr ReplyMsg(a6)
  898.  move.l InfoWindowHandler,a0
  899.  move.l IntuitionLib,a6
  900.  jsr CloseWindow(a6)
  901.  movem.l (sp)+,d0-a6
  902.  rts
  903.  
  904. ;****************************************************
  905. ;*** ZOOM : get On screen new coords ****************
  906. ;****************************************************
  907. OnScreen:
  908.  move.l WindowHandler,a0
  909.  btst #HardMouseButton,HardMouse
  910.  bne OnScreen
  911.  bsr GetCoords
  912.  move.w d1,PolyTable+2
  913.  move.w d0,PolyTable
  914.  move.w d1,PolyTable+6
  915.  move.w d0,PolyTable+4
  916.  move.l GfxLib,a6
  917.  move.l RastPort,a1
  918.  moveq.l #2,d0
  919.  jsr SetDrMd(a6)
  920.  move.l RastPort,a1
  921.  moveq.l #1,d0
  922.  jsr SetAPen(a6)
  923. DrawPoly:
  924.  bsr RectDraw
  925. GetMouseCoords:
  926.  move.l WindowHandler,a0
  927.  bsr GetCoords
  928.  btst #HardMouseButton,HardMouse
  929.  bne UnDrawPoly
  930.  cmp.w PolyTable,d0
  931.  bne UnDrawPoly
  932.  cmp.w PolyTable+2,d1
  933.  beq GetMouseCoords
  934. UnDrawPoly:
  935.  movem.w d0/d1,-(sp)
  936.  bsr RectDraw
  937.  movem.w (sp)+,d0/d1
  938.  btst #HardMouseButton,HardMouse
  939.  bne EndPolyWork
  940.  move.w d0,PolyTable+4
  941.  move.w d1,PolyTable+6
  942.  bra DrawPoly
  943. EndPolyWork:
  944.  move.l RastPort,a1
  945.  moveq.l #0,d0
  946.  jsr SetDrMd(a6)
  947.  move.w PolyTable,d0
  948.  move.w PolyTable+4,d1
  949.  cmp.w d0,d1
  950.  bgt XNoProb
  951.  exg d0,d1
  952. XNoProb:
  953.  bne XNoProb2
  954.  addq.w #1,d1
  955. XNoProb2:
  956.  move.w d0,PolyTable
  957.  move.w d1,PolyTable+4
  958.  move.w PolyTable+2,d0
  959.  move.w PolyTable+6,d1
  960.  cmp.w d0,d1
  961.  bgt YNoProb
  962.  exg d0,d1
  963. YNoProb:
  964.  bne YNoProb2
  965.  addq.w #1,d1
  966. YNoProb2:
  967.  move.w d1,PolyTable+6
  968.  move.w d0,PolyTable+2
  969.  move.l FFPLib,a6
  970.  move.l RealMaxX,d0
  971.  move.l RealMinX,d1
  972.  jsr SPSub(a6)
  973.  move.l RealXSize,d1
  974.  jsr SPDiv(a6)
  975.  move.l d0,d5
  976. ;MinX
  977.  move.w PolyTable,d0
  978.  sub.w ScrMinX+2,d0
  979.  and.l #$ffff,d0
  980.  jsr SPFlt(a6)
  981.  move.l d5,d1
  982.  jsr SPMul(a6)
  983.  move.l RealMinX,d1
  984.  jsr SPAdd(a6)
  985.  move.l d0,ZoomMinX
  986. ;MaxX
  987.  move.w PolyTable+4,d0
  988.  sub.w ScrMinX+2,d0 
  989.  and.l #$ffff,d0
  990.  jsr SPFlt(a6)
  991.  move.l d5,d1
  992.  jsr SPMul(a6)
  993.  move.l RealMinX,d1
  994.  jsr SPAdd(a6)
  995.  move.l d0,ZoomMaxX
  996. ;*
  997.  move.l RealMaxY,d0
  998.  move.l RealMinY,d1
  999.  jsr SPSub(a6)
  1000.  move.l RealYSize,d1
  1001.  jsr SPDiv(a6)
  1002.  move.l d0,d5
  1003. ;MinY
  1004.  move.w PolyTable+2,d0
  1005.  sub.w ScrMinY+2,d0
  1006.  and.l #$ffff,d0
  1007.  jsr SPFlt(a6)
  1008.  move.l d5,d1
  1009.  jsr SPMul(a6)
  1010.  move.l RealMinY,d1
  1011.  jsr SPAdd(a6)
  1012.  move.l d0,ZoomMinY
  1013. ;MaxY
  1014.  move.w PolyTable+6,d0
  1015.  sub.w ScrMinY+2,d0
  1016.  and.l #$ffff,d0
  1017.  jsr SPFlt(a6)
  1018.  move.l d5,d1
  1019.  jsr SPMul(a6)
  1020.  move.l RealMinY,d1
  1021.  jsr SPAdd(a6)
  1022.  move.l d0,ZoomMaxY
  1023. ;***
  1024.  move.b #-1,ZoomFlag
  1025.  rts    
  1026.  
  1027. RectDraw:
  1028.  move.l RastPort,a1
  1029.  move.w PolyTable,d0
  1030.  move.w PolyTable+2,d1
  1031.  jsr Move(a6)
  1032.  move.l RastPort,a1
  1033.  move.w PolyTable+4,d0
  1034.  move.w PolyTable+2,d1
  1035.  jsr Draw(a6)
  1036.  move.l RastPort,a1
  1037.  move.w PolyTable+4,d0
  1038.  move.w PolyTable+6,d1
  1039.  jsr Draw(a6)
  1040.  move.l RastPort,a1
  1041.  move.w PolyTable,d0
  1042.  move.w PolyTable+6,d1
  1043.  jsr Draw(a6)
  1044.  move.l RastPort,a1
  1045.  move.w PolyTable,d0
  1046.  move.w PolyTable+2,d1
  1047.  jsr Draw(a6)
  1048.  rts 
  1049.  
  1050. GetCoords:
  1051.  move.w 14(a0),d0
  1052.  move.w 12(a0),d1
  1053.  cmp.w ScrMinX+2,d0
  1054.  blt XnoOK1
  1055.  cmp.w ScrMaxX+2,d0
  1056.  bgt XnoOK2
  1057. XOK:
  1058.  cmp.w ScrMinY+2,d1
  1059.  blt YnoOK1
  1060.  cmp.w ScrMaxY+2,d1
  1061.  bgt YnoOK2
  1062. YOK:
  1063.  rts
  1064. XnoOK1:
  1065.  move.w ScrMinX+2,d0
  1066.  bra XOK
  1067. XnoOK2:
  1068.  move.w ScrMaxX+2,d0
  1069.  bra XOK
  1070. YnoOK1:
  1071.  move.w ScrMinY+2,d1
  1072.  bra YOK
  1073. YnoOK2:
  1074.  move.w ScrMaxY+2,d1
  1075.  bra YOK
  1076.   
  1077. ;************************************************
  1078. ;*** Window for a complete choice ***************
  1079. ;************************************************
  1080. Manual:
  1081.  move.l #StringGadget1,OKGadget
  1082.  move.l IntuitionLib,a6
  1083.  lea InfoWindowDefs,a0
  1084.  jsr OpenWindow(a6)
  1085.  move.l d0,InfoWindowHandler
  1086.  move.l 4,a6
  1087. ManualNotOK:
  1088.  move.l InfoWindowHandler,a0
  1089.  move.l 86(a0),a0
  1090.  jsr GetMsg(a6)
  1091.  tst.l d0
  1092.  bne ManualOK
  1093.  move.l InfoWindowHandler,a0
  1094.  move.l 86(A0),a0
  1095.  moveq.l #0,d1
  1096.  move.b 15(A0),d1
  1097.  moveq.l #1,d0
  1098.  asl.l d1,d0
  1099.  jsr Wait(A6)
  1100.  bra ManualNotOK
  1101. ManualOK: 
  1102.  move.l d0,a1
  1103.  move.l 28(a1),a0
  1104.  move.w $26(a0),d6
  1105.  jsr ReplyMsg(a6)
  1106.  cmpi.w #1,d6
  1107.  bne ManualNotOK
  1108.  move.l InfoWindowHandler,a0
  1109.  move.l IntuitionLib,a6
  1110.  jsr CloseWindow(a6)
  1111.  clr.b ZoomFlag
  1112.  lea MinX,a0
  1113.  bsr Verify
  1114.  lea MaxX,a0
  1115.  bsr Verify
  1116.  lea MinY,a0
  1117.  bsr Verify
  1118.  lea MaxY,a0
  1119.  bsr Verify
  1120.  bra WaitMenu
  1121.  
  1122. Verify:
  1123.  moveq.l #0,d1
  1124. VerifyNext:
  1125.  move.b (a0)+,d0
  1126.  tst.b d0
  1127.  beq EndVerify
  1128.  cmpi.b #' ',d0
  1129.  beq VerifyNext
  1130.  cmpi.b #'-',d0
  1131.  bne NotMinus
  1132.  btst #1,d1
  1133.  beq NotEvenOne
  1134.  move.b #' ',-1(a0)
  1135.  bra VerifyNext
  1136. NotEvenOne:
  1137.  bset #1,d1
  1138.  bra VerifyNext
  1139. NotMinus:
  1140.  cmpi.b #'.',d0
  1141.  bne NoPoint
  1142.  btst #2,d1
  1143.  beq NotEvenOneP
  1144.  move.b #' ',-1(a0)
  1145.  bra VerifyNext
  1146. NotEvenOneP:
  1147.  bset #2,d1
  1148.  bra VerifyNext
  1149. NoPoint:
  1150.  cmpi.b #'0',d0
  1151.  blt NoNumber
  1152.  cmpi.b #'9',d0
  1153.  bgt NoNumber
  1154.  btst #3,d1
  1155.  beq FirstNumber
  1156.  btst #2,d1
  1157.  bne VerifyNext
  1158. NoNumber:
  1159.  move.b #' ',-1(a0)
  1160.  bra VerifyNext
  1161. FirstNumber:
  1162.  bset #3,d1
  1163.  bra VerifyNext
  1164. EndVerify:
  1165.  rts   
  1166.  
  1167. ;************************************************
  1168. ;*** SaveILBM : A0 = screen *********************
  1169. ;************************************************
  1170. SaveILBM:
  1171.  move.l ArpLib,a6
  1172.  cmp.l #0,a6
  1173.  beq SaveWithoutArp
  1174.  lea ArpRequest,a0
  1175.  jsr FileRequest(A6)
  1176.  tst.l d0
  1177.  bne FileRequestOK
  1178.  rts
  1179. FileRequestOK:
  1180.  lea ArpRequest,a0
  1181.  move.l 8(a0),a1
  1182.  lea sILBM_Name,a2
  1183. LoopCheckDir:
  1184.  tst.b (a1)
  1185.  beq EndLoopCheckDir
  1186.  move.b (a1)+,(a2)+
  1187.  bra LoopCheckDir
  1188. EndLoopCheckDir:
  1189.  move.l 8(a0),a1
  1190.  tst.b (a1)
  1191.  beq AlreadySlash
  1192.  cmp.b #'/',-1(a2)
  1193.  beq AlreadySlash
  1194.  cmp.b #':',-1(a2)
  1195.  beq AlreadySlash
  1196.  move.b #'/',(a2)+
  1197. AlreadySlash:
  1198.  move.l 4(a0),a1
  1199. LoopCheckName:
  1200.  tst.b (a1)
  1201.  beq EndLoopCheckName
  1202.  move.b (a1)+,(a2)+
  1203.  bra LoopCheckName
  1204. EndLoopCheckName:
  1205.  clr.b (a2)
  1206.  bra SaveIt
  1207.  
  1208. SaveWithoutArp:
  1209.  move.l IntuitionLib,a6
  1210.  move.l #SaveGadget2,SaveGadget1
  1211.  lea SaveWindowDefs,a0
  1212.  jsr OpenWindow(a6)
  1213.  move.l d0,SaveWindowHandler
  1214.  move.l 4,a6
  1215. SaveNotOK:
  1216.  move.l SaveWindowHandler,a0
  1217.  move.l 86(a0),a0
  1218.  jsr GetMsg(a6)
  1219.  tst.l d0
  1220.  bne SaveOK
  1221.  move.l SaveWindowHandler,a0
  1222.  move.l 86(a0),a0
  1223.  moveq.l #0,d1
  1224.  move.b 15(A0),d1
  1225.  moveq.l #1,d0
  1226.  asl.l d1,d0
  1227.  jsr Wait(A6)
  1228.  bra SaveNotOK
  1229. SaveOK: 
  1230.  move.l d0,a1
  1231.  move.l 28(a1),a0
  1232.  move.w $26(a0),d6
  1233.  cmpi.w #3,d6
  1234.  jsr ReplyMsg(a6)
  1235.  beq SaveNotOK
  1236.  move.l SaveWindowHandler,a0
  1237.  move.l IntuitionLib,a6
  1238.  jsr CloseWindow(a6)
  1239.  cmpi.w #2,d6
  1240.  bne SaveIt
  1241.  rts
  1242. SaveIt:
  1243.  move.l ScreenHandler,a0
  1244.  move.l a0,-(sp)
  1245.  move.l 4,a6
  1246.  move.l #$10000,d1
  1247.  move.l #41000,d0
  1248.  jsr AllocMem(a6)
  1249.  move.l (sp)+,a0
  1250.  tst.l d0
  1251.  beq SaveError
  1252.  move.l d0,sILBM_Buffer
  1253.  move.l d0,a2
  1254.  move.l #'FORM',(a2)
  1255.  move.l #'ILBM',8(a2)
  1256.  move.l #'BMHD',12(a2)
  1257.  move.l #20,16(a2)
  1258.  move.l #$0a0b,32(a2)
  1259.  move.l #'CAMG',40(a2)
  1260.  move.l #4,44(a2)
  1261.  move.l #$4002,48(a2)
  1262.  lea 84(a0),a1        ;a1<-Rastport
  1263.  move.l 4(a1),a1    ;a1<-Bitmap
  1264.  move.b 5(a1),d0
  1265.  move.b d0,28(a2)
  1266.  moveq.l #1,d1
  1267.  lsl.l d0,d1
  1268.  move.l d1,d0
  1269.  mulu #3,d0
  1270.  move.l d0,56(a2)
  1271.  move.l #'CMAP',52(a2)
  1272.  move.l #'BODY',60(a2,d0.w)
  1273.  move.l a2,a3
  1274.  add.l d0,a3
  1275.  add.l #68,a3
  1276.  move.w (a1),d1        ;d1<-BytesPerRow
  1277.  lsl.w #3,d1
  1278.  move.w d1,20(a2)
  1279.  move.w d1,36(a2)
  1280.  move.w 2(a1),22(a2)
  1281.  move.w 2(a1),38(a2)
  1282.  move.b #1,30(a2)    ;ByteRun1
  1283.  lea 44(a0),a0        ;a0<-Viewport
  1284.  move.l 4(a0),a0    ;a0<-ColorMap
  1285.  move.l 4(a0),a0    ;a0<-ColorTable
  1286.  lea 60(a2),a4
  1287.  divu #3,d0
  1288.  subq.w #1,d0
  1289. sILBM_LoopColors:
  1290.      move.w (a0)+,d1
  1291.      move.w d1,d2
  1292.      move.w d1,d3
  1293.      lsr.w #4,d1
  1294.      andi.w #$f0,d1
  1295.      move.b d1,(a4)+
  1296.      andi.w #$f0,d2
  1297.      move.b d2,(a4)+
  1298.      lsl.w #4,d3
  1299.      move.b d3,(a4)+
  1300.  dbra d0,sILBM_LoopColors
  1301.  ;a3<-Body StartAdress
  1302.  ;a1<-Bitmap
  1303.  movem.l 8(a1),d1-d5
  1304.  movem.l d1-d5,sILBM_PlanePtr
  1305.  move.w 2(a1),d7    ;d7 <- # of rows
  1306.  move.b 5(a1),d6
  1307.  ext.w d6        ;d6 <- # of planes
  1308.  move.w d6,sILBM_Depth
  1309.  move.w (a1),d5        ;d5 <- Bytes per row
  1310.  subq.w #1,d5
  1311.  move.w d5,sILBM_BytesPerRow
  1312.  move.l a3,a1        ;a1 <- Buffer
  1313. sILBM_LoopRows:
  1314.  moveq.w #0,d6        ;d6 <- Plane to be computed
  1315. sILBM_LoopPlanes:
  1316.  move.w d6,d5
  1317.  lsl.w #2,d5
  1318.  lea sILBM_PlanePtr,a0
  1319.  lea 0(a0,d5.w),a5    ;a0 <- address of plane
  1320.  move.l (a5),a0
  1321.  move.w sILBM_BytesPerRow,d5
  1322.  move.l a1,a2
  1323.  add.l #1,a1
  1324.  move.b (a0)+,d3
  1325.  move.b d3,(a1)+
  1326.  moveq.b #0,d4
  1327.  cmp.b (a0),d3
  1328.  bne sILBM_FirstAreDiff
  1329.  cmp.b 1(a0),d3
  1330.  bne sILBM_FirstAreDiff
  1331.  moveq.b #0,d2        ;d2 <- flag identic/different
  1332.  bra sILBM_LoopBytes
  1333. sILBM_FirstAreDiff:
  1334.  moveq.b #-1,d2
  1335. sILBM_LoopBytes:
  1336.  move.b (a0)+,d1
  1337.  cmp.b d1,d3
  1338.  bne sILBM_AreSame
  1339.      tst.b d2
  1340.      bne sILBM_AreSame1
  1341.          subq.b #1,d4
  1342.          bra sILBM_EndTest
  1343. sILBM_AreSame1:
  1344.         cmp.b (a0),d1
  1345.         bne sILBM_AreSame2
  1346.         subq.b #1,d4
  1347.         move.b d4,(a2)
  1348.         moveq.b #-1,d4
  1349.         move.l a1,a2
  1350.         sub.l #1,a2
  1351.         move.b d1,(a1)+
  1352.         moveq.b #0,d2
  1353.         bra sILBM_EndTest
  1354. sILBM_AreSame:
  1355.     tst.b d2
  1356.     bne sILBM_AreSame2
  1357.         move.b d4,(a2)
  1358.         moveq.b #0,d4
  1359.         move.l a1,a2
  1360.         add.l #1,a1
  1361.         move.b d1,(a1)+
  1362.         cmp.b (a0),d1
  1363.         bne sILBM_WillBeDiff
  1364.         cmp.b 1(a0),d1
  1365.         bne sILBM_WillBeDiff
  1366.         moveq.b #0,d2
  1367.         bra sILBM_EndTest
  1368. sILBM_WillBeDiff:        
  1369.         moveq.b #-1,d2
  1370.         bra sILBM_EndTest
  1371. sILBM_AreSame2:
  1372.     move.b d1,(a1)+
  1373.     addq.b #1,d4
  1374. sILBM_EndTest:
  1375.  move.b d1,d3
  1376.  subq.w #1,d5
  1377.  bne sILBM_LoopBytes
  1378.  move.b d4,(a2)                             
  1379.  move.l a0,(a5)
  1380.  addq.w #1,d6
  1381.  cmp.w sILBM_Depth,d6
  1382.  blt sILBM_LoopPlanes
  1383.  dbra d7,sILBM_LoopRows
  1384.  sub.l #1,a1
  1385.  move.l a1,d4
  1386.  sub.l a3,d4
  1387.  addq.l #1,d4
  1388.  andi.l #-2,d4
  1389.  move.l d4,-4(a3)
  1390.  move.l sILBM_Buffer,a3
  1391.  move.l a1,d4
  1392.  sub.l a3,d4
  1393.  addq.l #1,d4
  1394.  andi.l #-2,d4
  1395.  move.l d4,d2
  1396.  sub.l #8,d4
  1397.  move.l d4,4(a3)
  1398.  
  1399.  move.l DosLib,a6
  1400.  move.l d2,d6
  1401.  move.l a3,a5
  1402.  move.l #1006,d2
  1403.  move.l #sILBM_Name,d1
  1404.  jsr Open(a6)
  1405.  tst.l d0
  1406.  beq SaveError2
  1407.  move.l d0,sILBM_Lock
  1408.  move.l d0,d1
  1409.  move.l a5,d2
  1410.  move.l d6,d3
  1411.  jsr Write(a6)
  1412.  move.l sILBM_Lock,d1
  1413.  jsr Close(a6)
  1414.  
  1415. SaveFreeIt: 
  1416.  move.l 4,a6
  1417.  move.l sILBM_Buffer,a1
  1418.  move.l #41000,d0
  1419.  jsr FreeMem(a6)
  1420.  rts
  1421.  
  1422. SaveError2:
  1423.  bsr SaveFreeIt
  1424. SaveError:
  1425.  clr.l SaveGadget1
  1426.  move.l IntuitionLib,a6
  1427.  lea SaveWindowDefs,a0
  1428.  jsr OpenWindow(a6)
  1429.  move.l d0,SaveWindowHandler
  1430.  move.l d0,a0
  1431.  move.l 50(a0),a0
  1432.  lea SaveErrorText,a1
  1433.  moveq.l #10,d0
  1434.  move.l d0,d1
  1435.  jsr PrintIText(a6)
  1436.  move.l 4,a6
  1437. SaveErrorNotOK:
  1438.  move.l SaveWindowHandler,a0
  1439.  move.l 86(a0),a0
  1440.  jsr GetMsg(a6)
  1441.  tst.l d0
  1442.  bne SaveErrorOK
  1443.  move.l SaveWindowHandler,a0
  1444.  move.l 86(a0),a0
  1445.  moveq.l #0,d1
  1446.  move.b 15(a0),d1
  1447.  moveq.l #1,d0
  1448.  asl.l d1,d0
  1449.  jsr Wait(a6)
  1450.  bra SaveErrorNotOK
  1451. SaveErrorOK: 
  1452.  move.l d0,a1
  1453.  jsr ReplyMsg(a6)
  1454.  move.l SaveWindowHandler,a0
  1455.  move.l IntuitionLib,a6
  1456.  jsr CloseWindow(a6)
  1457.  rts
  1458.  
  1459. ;************************************************
  1460. ;*** FastPlot Rastport,X,Y,Color (a0,d0,d1,d2) **
  1461. ;************************************************
  1462. FastPlot:
  1463.  movem.l d3/a1,-(sp)
  1464.  add.w #10,d1
  1465.  move.l 4(a0),a0
  1466.  move.w (a0),d3
  1467.  mulu d1,d3
  1468.  move.w d0,d1
  1469.  lsr.w #3,d1
  1470.  add.w d1,d3    ;d3 <- Adress to plot
  1471.  lsl.w #3,d1
  1472.  sub.w d1,d0    ;d0 <- Bit to plot
  1473.  neg.b d0
  1474.  subq.b #1,d0
  1475.  andi.b #7,d0
  1476.  move.b 5(a0),d1 ;d1 <- # of bitplanes
  1477.  subq.b #1,d1
  1478.  ext.w d1
  1479.  add.l #8,a0
  1480. FastPlot_LoopPlanes:
  1481.  move.l (a0)+,a1
  1482.  lsr.b #1,d2
  1483.  bcs FastPlot_BitSet
  1484.  bclr d0,0(a1,d3.w)
  1485.  bra FastPlot_EndLoopPlanes
  1486. FastPlot_BitSet:
  1487.  bset d0,0(a1,d3.w)
  1488. FastPlot_EndLoopPlanes:
  1489.  dbra d1,FastPlot_LoopPlanes
  1490.  movem.l (sp)+,d3/a1
  1491.  rts
  1492.  
  1493. RemInfoFunc:
  1494.  lea $1c(a0),a0
  1495.  move.l a0,d0
  1496. CheckZero:
  1497.  tst.b (a0)+
  1498.  bne CheckZero
  1499.  subq.l #1,d0
  1500.  sub.l a0,d0
  1501.  neg.l d0
  1502.  subq.l #5,d0
  1503.  bcs NotAnInfoFile
  1504.  cmpi.b #'o',-(A0)
  1505.  bne.s NotAnInfoFile
  1506.  cmpi.b #'f',-(a0)
  1507.  bne.s NotAnInfoFile
  1508.  cmpi.b #'n',-(a0)
  1509.  bne.s NotAnInfoFile
  1510.  cmpi.b #'i',-(a0)
  1511.  bne.s NotAnInfoFile
  1512.  cmpi.b #'.',(a0)
  1513.  bne.s NotAnInfoFile
  1514.  moveq #-1,d0
  1515.  move.l d0,4(a7)
  1516.  rts
  1517. NotAnInfoFile:
  1518.  moveq #0,d0
  1519.  move.l d0,4(a7)
  1520.  rts
  1521.  
  1522. ;************************************************
  1523. ;*** DATA ***************************************
  1524. ;************************************************
  1525.  
  1526.  SECTION rempli,DATA
  1527.  
  1528. IntuitionName:
  1529.  dc.b 'intuition.library',0
  1530.  even
  1531. GfxName:
  1532.  dc.b 'graphics.library',0
  1533.  even
  1534. FFPName:
  1535.  dc.b 'mathffp.library',0
  1536.  even
  1537. DosName:
  1538.  dc.b 'dos.library',0
  1539.  even
  1540. ArpName:
  1541.  dc.b 'arp.library',0
  1542.  even
  1543. IntuitionLib:
  1544.  dc.l 0
  1545. GfxLib:
  1546.  dc.l 0
  1547. FFPLib:
  1548.  dc.l 0
  1549. DosLib:
  1550.  dc.l 0
  1551. ArpLib:
  1552.  dc.l 0
  1553. WB_Message:
  1554.  dc.l 0
  1555. MyTask:
  1556.  dc.l 0
  1557. OldFashion:
  1558.  dc.l 0
  1559.  
  1560. ScreenDefs:
  1561.  dc.w 0,0
  1562.  dc.w 320,200,5
  1563.  dc.b 0,1
  1564.  dc.w 2,15
  1565.  dc.l 0
  1566.  dc.l TitreEcran
  1567.  dc.l 0,0
  1568.  even
  1569. TitreEcran:
  1570.  dc.b 'Fractal Dynamics '
  1571.  dc.l VERSION
  1572.  dc.b 'by J-F Stenuit',0
  1573.  even
  1574. WindowDefs:
  1575.  dc.w 0,10
  1576.  dc.w 320,190
  1577.  dc.b 0,1
  1578.  dc.l $100     ;IDCMP = Menu
  1579.  dc.l $1000  
  1580.  dc.l 0      ;No gadget
  1581.  dc.l 0
  1582.  dc.l TitreFenetre1
  1583. ScreenHandler: dc.l 0
  1584.  dc.l 0
  1585.  dc.w 320,190,320,190
  1586.  dc.w 15
  1587.  even
  1588. WindowHandler:
  1589.  dc.l 0
  1590. RastPort:
  1591.  dc.l 0
  1592. TitreFenetre1:
  1593.  dc.b 'Julia Set',0
  1594.  even
  1595. TitreFenetre2:
  1596.  dc.b 'Mandelbrot Set',0
  1597.  even
  1598. InfoWindowDefs:
  1599.  dc.w 20,58
  1600.  dc.w 280,96
  1601.  dc.b 3,4
  1602.  dc.l $40     ;IDCMP=GadgetUp
  1603.  dc.l $11000  
  1604.  dc.l OKGadget    
  1605.  dc.l 0
  1606.  dc.l 0
  1607. ScreenHandler2: dc.l 0
  1608.  dc.l 0
  1609.  dc.w 280,96,280,96
  1610.  dc.w 15
  1611.  even
  1612. InfoWindowHandler:
  1613.  dc.l 0
  1614.  
  1615. InfoText:
  1616.  dc.b 3,0,4
  1617.  dc.w 0,0
  1618.  dc.l 0,InfoTextA
  1619.  dc.l InfoText1
  1620. InfoText1:
  1621.  dc.b 4,0,0
  1622.  dc.w 10,20
  1623.  dc.l 0,InfoText1A
  1624.  dc.l InfoText2
  1625. InfoText2:
  1626.  dc.b 5,0,0
  1627.  dc.w 20,40
  1628.  dc.l 0,InfoText2A
  1629.  dc.l 0
  1630. InfoTextA:
  1631.  dc.b 'Fractal Dynamics Generator PRO',0
  1632.  even
  1633. InfoText1A:
  1634.  dc.b '(c) Jean-François Stenuit',0
  1635.  even
  1636. InfoText2A:
  1637.  dc.b 'Many thanks to Igor Prozenko',0
  1638.  even
  1639.  
  1640. OKGadget:
  1641.  dc.l 0
  1642.  dc.w 220,76,32,12
  1643.  dc.w 0
  1644.  dc.w 1,1
  1645.  dc.l OKGadgetBorder,0
  1646.  dc.l OKGadgetName
  1647.  dc.l 0,0
  1648.  dc.w 1
  1649.  dc.l 0
  1650. OKGadgetName:
  1651.  dc.b 1,0,1
  1652.  dc.w 6,2
  1653.  dc.l 0,OKGadgetText,0
  1654. OKGadgetText:
  1655.  dc.b 'OK',0
  1656.  even
  1657. OKGadgetBorder:
  1658.  dc.w 0,0
  1659.  dc.b 3,0,0,5
  1660.  dc.l OKGadgetBorderCoord
  1661.  dc.l 0
  1662. OKGadgetBorderCoord:
  1663.  dc.w -2,-2,-2,14,34,14,34,-2,-2,-2 
  1664.  
  1665. StringGadget1:
  1666.  dc.l StringGadget2
  1667.  dc.w 20,20,80,10
  1668.  dc.w 0
  1669.  dc.w 2,4
  1670.  dc.l StrGadget1Border,0
  1671.  dc.l StrGadget1Name,0,StrGadget1SInfo
  1672.  dc.w 2
  1673.  dc.l 0
  1674. StrGadget1Name:
  1675.  dc.b 1,0,1
  1676.  dc.w 0,-15
  1677.  dc.l 0,StrGadget1Text,0
  1678. StrGadget1Text:
  1679.  dc.b 'r Axis min',0
  1680.  even
  1681. StrGadget1Border:
  1682.  dc.w 0,0
  1683.  dc.b 3,0,0,5
  1684.  dc.l StrGadget1BorderCoord
  1685.  dc.l 0
  1686. StrGadget1BorderCoord:
  1687.  dc.w -2,-2,-2,9,82,9,82,-2,-2,-2
  1688. StrGadget1SInfo:
  1689.  dc.l MinX
  1690.  dc.l Buffer
  1691.  dc.w 0,10,0,0,0,0,0,0
  1692.  dc.l 0,0,0
  1693.   
  1694. StringGadget2:
  1695.  dc.l StringGadget3
  1696.  dc.w 140,20,80,10
  1697.  dc.w 0
  1698.  dc.w 2,4
  1699.  dc.l StrGadget2Border,0
  1700.  dc.l StrGadget2Name,0,StrGadget2SInfo
  1701.  dc.w 3
  1702.  dc.l 0
  1703. StrGadget2Name:
  1704.  dc.b 1,0,1
  1705.  dc.w 0,-15
  1706.  dc.l 0,StrGadget2Text,0
  1707. StrGadget2Text:
  1708.  dc.b 'r Axis max',0
  1709.  even
  1710. StrGadget2Border:
  1711.  dc.w 0,0
  1712.  dc.b 3,0,0,5
  1713.  dc.l StrGadget2BorderCoord
  1714.  dc.l 0
  1715. StrGadget2BorderCoord:
  1716.  dc.w -2,-2,-2,9,82,9,82,-2,-2,-2
  1717. StrGadget2SInfo:
  1718.  dc.l MaxX
  1719.  dc.l Buffer+14
  1720.  dc.w 0,10,0,0,0,0,0,0
  1721.  dc.l 0,0,0
  1722.  
  1723. StringGadget3:
  1724.  dc.l StringGadget4
  1725.  dc.w 20,60,80,10
  1726.  dc.w 0
  1727.  dc.w 2,4
  1728.  dc.l StrGadget3Border,0
  1729.  dc.l StrGadget3Name,0,StrGadget3SInfo
  1730.  dc.w 4
  1731.  dc.l 0
  1732. StrGadget3Name:
  1733.  dc.b 1,0,1
  1734.  dc.w 0,-15
  1735.  dc.l 0,StrGadget3Text,0
  1736. StrGadget3Text:
  1737.  dc.b 'i Axis min',0
  1738.  even
  1739. StrGadget3Border:
  1740.  dc.w 0,0
  1741.  dc.b 3,0,0,5
  1742.  dc.l StrGadget3BorderCoord
  1743.  dc.l 0
  1744. StrGadget3BorderCoord:
  1745.  dc.w -2,-2,-2,9,82,9,82,-2,-2,-2
  1746. StrGadget3SInfo:
  1747.  dc.l MinY
  1748.  dc.l Buffer+28
  1749.  dc.w 0,10,0,0,0,0,0,0
  1750.  dc.l 0,0,0
  1751.  
  1752. StringGadget4:
  1753.  dc.l 0
  1754.  dc.w 140,60,80,10
  1755.  dc.w 0
  1756.  dc.w 2,4
  1757.  dc.l StrGadget4Border,0
  1758.  dc.l StrGadget4Name,0,StrGadget4SInfo
  1759.  dc.w 5
  1760.  dc.l 0
  1761. StrGadget4Name:
  1762.  dc.b 1,0,1
  1763.  dc.w 0,-15
  1764.  dc.l 0,StrGadget4Text,0
  1765. StrGadget4Text:
  1766.  dc.b 'i Axis max',0
  1767.  even
  1768. StrGadget4Border:
  1769.  dc.w 0,0
  1770.  dc.b 3,0,0,5
  1771.  dc.l StrGadget4BorderCoord
  1772.  dc.l 0
  1773. StrGadget4BorderCoord:
  1774.  dc.w -2,-2,-2,9,82,9,82,-2,-2,-2
  1775. StrGadget4SInfo:
  1776.  dc.l MaxY
  1777.  dc.l Buffer+42
  1778.  dc.w 0,10,0,0,0,0,0,0
  1779.  dc.l 0,0,0
  1780.  
  1781. JuliaWindowDefs:
  1782.  dc.w 60,30
  1783.  dc.w 200,70
  1784.  dc.b 3,4
  1785.  dc.l $40     ;IDCMP=GadgetUp
  1786.  dc.l $11000  
  1787.  dc.l JuliaGadget1    
  1788.  dc.l 0
  1789.  dc.l 0
  1790. ScreenHandler3: dc.l 0
  1791.  dc.l 0
  1792.  dc.w 140,60,140,60
  1793.  dc.w 15
  1794.  even
  1795. JuliaWindowHandler:
  1796.  dc.l 0
  1797.  
  1798. JuliaGadget1:
  1799.  dc.l JuliaGadget2
  1800.  dc.w 160,40,32,12
  1801.  dc.w 0
  1802.  dc.w 1,1
  1803.  dc.l OKGadgetBorder,0
  1804.  dc.l OKGadgetName
  1805.  dc.l 0,0
  1806.  dc.w 1
  1807.  dc.l 0
  1808.  
  1809. JuliaGadget2:
  1810.  dc.l JuliaGadget3
  1811.  dc.w 104,20,88,12
  1812.  dc.w 0
  1813.  dc.w 1,1
  1814.  dc.l JuliaGadget2Border,0
  1815.  dc.l JuliaGadget2Name
  1816.  dc.l 0,0
  1817.  dc.w 2
  1818.  dc.l 0
  1819. JuliaGadget2Name:
  1820.  dc.b 1,0,1
  1821.  dc.w 6,2
  1822.  dc.l 0,JuliaGadget2Text,0
  1823. JuliaGadget2Text:
  1824.  dc.b 'On screen',0
  1825.  even
  1826. JuliaGadget2Border:
  1827.  dc.w 0,0
  1828.  dc.b 3,0,0,5
  1829.  dc.l JuliaGadget2BorderCoord
  1830.  dc.l 0
  1831. JuliaGadget2BorderCoord:
  1832.  dc.w -2,-2,-2,14,90,14,90,-2,-2,-2 
  1833.     
  1834. JuliaGadget3:
  1835.  dc.l JuliaGadget4
  1836.  dc.w 5,20,80,10
  1837.  dc.w 0
  1838.  dc.w 2,4
  1839.  dc.l StrGadget3Border,0
  1840.  dc.l JuliaGadget3Name,0,JuliaGadget3SInfo
  1841.  dc.w 3
  1842.  dc.l 0
  1843. JuliaGadget3Name:
  1844.  dc.b 1,0,1
  1845.  dc.w 0,-15
  1846.  dc.l 0,JuliaGadget3Text,0
  1847. JuliaGadget3Text:
  1848.  dc.b 'r parameter',0
  1849.  even
  1850. JuliaGadget3SInfo:
  1851.  dc.l AA
  1852.  dc.l Buffer
  1853.  dc.w 0,10,0,0,0,0,0,0
  1854.  dc.l 0,0,0
  1855.  
  1856. JuliaGadget4:
  1857.  dc.l 0
  1858.  dc.w 5,50,80,10
  1859.  dc.w 0
  1860.  dc.w 2,4
  1861.  dc.l StrGadget4Border,0
  1862.  dc.l JuliaGadget4Name,0,JuliaGadget4SInfo
  1863.  dc.w 4
  1864.  dc.l 0
  1865. JuliaGadget4Name:
  1866.  dc.b 1,0,1
  1867.  dc.w 0,-15
  1868.  dc.l 0,JuliaGadget4Text,0
  1869. JuliaGadget4Text:
  1870.  dc.b 'i parameter',0
  1871.  even
  1872. JuliaGadget4SInfo:
  1873.  dc.l OO
  1874.  dc.l Buffer+14
  1875.  dc.w 0,10,0,0,0,0,0,0
  1876.  dc.l 0,0,0
  1877.  
  1878. SaveWindowDefs:
  1879.  dc.w 60,30
  1880.  dc.w 200,70
  1881.  dc.b 3,4
  1882.  dc.l $40     ;IDCMP=GadgetUp
  1883.  dc.l $11000  
  1884.  dc.l SaveGadget1    
  1885.  dc.l 0
  1886.  dc.l 0
  1887. ScreenHandler4: dc.l 0
  1888.  dc.l 0
  1889.  dc.w 140,60,140,60
  1890.  dc.w 15
  1891.  even
  1892. SaveWindowHandler:
  1893.  dc.l 0
  1894.  
  1895. SaveGadget1:
  1896.  dc.l SaveGadget2
  1897.  dc.w 160,40,32,12
  1898.  dc.w 0
  1899.  dc.w 1,1
  1900.  dc.l OKGadgetBorder,0
  1901.  dc.l OKGadgetName
  1902.  dc.l 0,0
  1903.  dc.w 1
  1904.  dc.l 0
  1905.  
  1906. SaveGadget2:
  1907.  dc.l SaveGadget3
  1908.  dc.w 5,40,72,12
  1909.  dc.w 0
  1910.  dc.w 1,1
  1911.  dc.l SaveGadget2Border,0
  1912.  dc.l SaveGadget2Name
  1913.  dc.l 0,0
  1914.  dc.w 2
  1915.  dc.l 0
  1916. SaveGadget2Name:
  1917.  dc.b 1,0,1
  1918.  dc.w 6,2
  1919.  dc.l 0,SaveGadget2Text,0
  1920. SaveGadget2Text:
  1921.  dc.b 'Cancel',0
  1922.  even
  1923. SaveGadget2Border:
  1924.  dc.w 0,0
  1925.  dc.b 3,0,0,5
  1926.  dc.l SaveGadget2BorderCoord
  1927.  dc.l SaveGadget2bBorder
  1928. SaveGadget2BorderCoord:
  1929.  dc.w -2,-2,-2,14,74,14,74,-2,-2,-2 
  1930. SaveGadget2bBorder:
  1931.  dc.w 0,0
  1932.  dc.b 3,0,0,5
  1933.  dc.l SaveGadget2bBorderCoord
  1934.  dc.l 0
  1935. SaveGadget2bBorderCoord:
  1936.  dc.w 0,0,0,12,72,12,72,0,0,0
  1937.   
  1938. SaveGadget3:
  1939.  dc.l 0
  1940.  dc.w 5,20,187,10
  1941.  dc.w 0
  1942.  dc.w 2,4
  1943.  dc.l SaveGadget3Border,0
  1944.  dc.l SaveGadget3Name,0,SaveGadget3SInfo
  1945.  dc.w 4
  1946.  dc.l 0
  1947. SaveGadget3Name:
  1948.  dc.b 1,0,1
  1949.  dc.w 0,-15
  1950.  dc.l 0,SaveGadget3Text,0
  1951. SaveGadget3Text:
  1952.  dc.b 'Save name :',0
  1953.  even
  1954. SaveGadget3SInfo:
  1955.  dc.l sILBM_Name
  1956.  dc.l Buffer
  1957.  dc.w 0,29,0,0,0,0,0,0
  1958.  dc.l 0,0,0
  1959. SaveGadget3Border:
  1960.  dc.w 0,0
  1961.  dc.b 3,0,0,5
  1962.  dc.l SaveGadget3BorderCoord
  1963.  dc.l 0
  1964. SaveGadget3BorderCoord:
  1965.  dc.w -2,-2,-2,9,189,9,189,-2,-2,-2
  1966.  
  1967. SaveErrorText:
  1968.  dc.b 1,0,4
  1969.  dc.w 0,0
  1970.  dc.l 0,SaveErrorA
  1971.  dc.l 0
  1972. SaveErrorA:
  1973.  dc.b 'Save Error, sorry',0
  1974.  even
  1975.  
  1976. ArpRequest:
  1977.  dc.l ArpRequestName
  1978.  dc.l FileNameBuffer
  1979.  dc.l DirNameBuffer
  1980.  dc.l 0
  1981.  dc.w 0
  1982.  dc.l RemInfoFunc
  1983.  dc.w 10,30
  1984. ArpRequestName:
  1985.  dc.b 'Save file :',0
  1986.  even
  1987.  
  1988. Menu00:
  1989.  dc.l Menu10
  1990.  dc.w 5,0
  1991.  dc.w 60,10
  1992.  dc.w 1
  1993.  dc.l Menu00Name
  1994.  dc.l Menu01
  1995.  dc.w 0,0,0,0
  1996. Menu00Name:
  1997.  dc.b 'Project',0
  1998.  even
  1999. Menu10:
  2000.  dc.l Menu20 
  2001.  dc.w 65,0
  2002.  dc.w 60,10
  2003.  dc.w 1
  2004.  dc.l Menu10Name
  2005.  dc.l Menu11
  2006.  dc.w 0,0,0,0
  2007. Menu10Name:
  2008.  dc.b 'Set',0
  2009.  even
  2010. Menu20:
  2011.  dc.l Menu30
  2012.  dc.w 125,0
  2013.  dc.w 60,10
  2014.  dc.w 1
  2015.  dc.l Menu20Name
  2016.  dc.l Menu21
  2017.  dc.w 0,0,0,0
  2018. Menu20Name:
  2019.  dc.b 'Zoom',0
  2020.  even
  2021. Menu30:
  2022.  dc.l Menu40
  2023.  dc.w 185,0
  2024.  dc.w 60,10
  2025.  dc.w 1
  2026.  dc.l Menu30Name
  2027.  dc.l Menu31
  2028.  dc.w 0,0,0,0
  2029. Menu30Name:
  2030.  dc.b 'Colors',0
  2031.  even
  2032. Menu40:
  2033.  dc.l 0
  2034.  dc.w 245,0
  2035.  dc.w 60,10
  2036.  dc.w 1
  2037.  dc.l Menu40Name
  2038.  dc.l Menu41
  2039.  dc.w 0,0,0,0
  2040. Menu40Name:
  2041.  dc.b 'Picture',0
  2042.  even
  2043.  
  2044. Menu01:
  2045.  dc.l Menu02
  2046.  dc.w 0,0
  2047.  dc.w 90,10
  2048.  dc.w $52
  2049.  dc.l 0
  2050.  dc.l Menu01Name
  2051.  dc.l 0
  2052.  dc.b 'S',0
  2053.  dc.l 0
  2054.  dc.w 0
  2055. Menu01Name:
  2056.  dc.b 2,0,2
  2057.  dc.w 0,0
  2058.  dc.l 0,Menu01Text,0
  2059. Menu01Text:
  2060.  dc.b 'Save',0 
  2061.  even
  2062. Menu02:
  2063.  dc.l Menu03
  2064.  dc.w 0,12
  2065.  dc.w 90,10
  2066.  dc.w $52
  2067.  dc.l 0
  2068.  dc.l Menu02Name
  2069.  dc.l 0
  2070.  dc.b 'I'
  2071.  even
  2072.  dc.l 0
  2073.  dc.w 0
  2074. Menu02Name:
  2075.  dc.b 2,0,2
  2076.  dc.w 0,0
  2077.  dc.l 0,Menu02Text,0
  2078. Menu02Text:
  2079.  dc.b 'Info',0
  2080.  even
  2081. Menu03:
  2082.  dc.l Menu04
  2083.  dc.w 0,24
  2084.  dc.w 90,10
  2085.  dc.w $56
  2086.  dc.l 0
  2087.  dc.l Menu03Name
  2088.  dc.l 0
  2089.  dc.b 'G'
  2090.  even
  2091.  dc.l 0
  2092.  dc.w 0
  2093. Menu03Name:
  2094.  dc.b 2,0,2
  2095.  dc.w 0,0
  2096.  dc.l 0,Menu03Text,0
  2097. Menu03Text:
  2098.  dc.b 'Generate',0
  2099.  even
  2100. Menu04:
  2101.  dc.l Menu05
  2102.  dc.w 0,36
  2103.  dc.w 90,10
  2104.  dc.w $42
  2105.  dc.l 0
  2106.  dc.l Menu04Name
  2107.  dc.l 0
  2108.  dc.b 'S'
  2109.  even
  2110.  dc.l 0
  2111.  dc.w 0
  2112. Menu04Name:
  2113.  dc.b 2,0,2
  2114.  dc.w 0,0
  2115.  dc.l 0,Menu04Text,0
  2116. Menu04Text:
  2117.  dc.b 'Stop = ESC',0
  2118.  even
  2119.  
  2120. Menu05:
  2121.  dc.l 0
  2122.  dc.w 0,60
  2123.  dc.w 90,10
  2124.  dc.w $56
  2125.  dc.l 0
  2126.  dc.l Menu05Name
  2127.  dc.l 0
  2128.  dc.b 'Q'
  2129.  even
  2130.  dc.l 0
  2131.  dc.w 0
  2132. Menu05Name:
  2133.  dc.b 2,0,2
  2134.  dc.w 0,0
  2135.  dc.l 0,Menu05Text,0
  2136. Menu05Text:
  2137.  dc.b 'Quit',0
  2138.  even
  2139.  
  2140. Menu11:
  2141.  dc.l Menu12
  2142.  dc.w 0,0
  2143.  dc.w 100,10
  2144.  dc.w $53
  2145.  dc.l 0
  2146.  dc.l Menu11Name
  2147.  dc.l 0
  2148.  dc.b 'M'
  2149.  even
  2150.  dc.l 0
  2151.  dc.w 0
  2152. Menu11Name:
  2153.  dc.b 2,0,2
  2154.  dc.w 0,0
  2155.  dc.l 0,Menu11Text,0
  2156. Menu11Text:
  2157.  dc.b '  Mandelbrot' 
  2158.  even
  2159. Menu12:
  2160.  dc.l 0
  2161.  dc.w 0,12
  2162.  dc.w 100,10
  2163.  dc.w $153
  2164.  dc.l 0
  2165.  dc.l Menu12Name
  2166.  dc.l 0
  2167.  dc.b 'J'
  2168.  even
  2169.  dc.l 0
  2170.  dc.w 0
  2171. Menu12Name:
  2172.  dc.b 2,0,2
  2173.  dc.w 0,0
  2174.  dc.l 0,Menu12Text,0
  2175. Menu12Text:
  2176.  dc.b '  Julia',0
  2177.  even
  2178.  
  2179. Menu21:
  2180.  dc.l Menu22
  2181.  dc.w 0,0
  2182.  dc.w 80,10
  2183.  dc.w $52
  2184.  dc.l 0
  2185.  dc.l Menu21Name
  2186.  dc.l 0
  2187.  dc.b 'O'
  2188.  even
  2189.  dc.l 0
  2190.  dc.w 0
  2191. Menu21Name:
  2192.  dc.b 2,0,2
  2193.  dc.w 0,0
  2194.  dc.l 0,Menu21Text,0
  2195. Menu21Text:
  2196.  dc.b 'On screen',0
  2197.  even
  2198. Menu22:
  2199.  dc.l 0
  2200.  dc.w 0,12
  2201.  dc.w 80,10
  2202.  dc.w $52
  2203.  dc.l 0
  2204.  dc.l Menu22Name
  2205.  dc.l 0
  2206.  dc.b 'M'
  2207.  even
  2208.  dc.l 0
  2209.  dc.w 0
  2210. Menu22Name:
  2211.  dc.b 2,0,2
  2212.  dc.w 0,0
  2213.  dc.l 0,Menu22Text,0
  2214. Menu22Text:
  2215.  dc.b 'Manual',0
  2216.  even      
  2217. Menu41:
  2218.  dc.l Menu42
  2219.  dc.w 0,0
  2220.  dc.w 60,10
  2221.  dc.w $53
  2222.  dc.l 0
  2223.  dc.l Menu41Name
  2224.  dc.l 0
  2225.  dc.b 'L'
  2226.  even
  2227.  dc.l 0
  2228.  dc.w 0
  2229. Menu41Name:
  2230.  dc.b 2,0,2
  2231.  dc.w 0,0
  2232.  dc.l 0,Menu41Text,0
  2233. Menu41Text:
  2234.  dc.b '  Large',0
  2235.  even
  2236. Menu42:
  2237.  dc.l 0
  2238.  dc.w 0,12
  2239.  dc.w 60,10
  2240.  dc.w $153
  2241.  dc.l 0
  2242.  dc.l Menu42Name
  2243.  dc.l 0
  2244.  dc.b 'S'
  2245.  even
  2246.  dc.l 0
  2247.  dc.w 0
  2248. Menu42Name:
  2249.  dc.b 2,0,2
  2250.  dc.w 0,0
  2251.  dc.l 0,Menu42Text,0
  2252. Menu42Text:
  2253.  dc.b '  Small',0
  2254.  even
  2255.  
  2256. Menu31:
  2257.  dc.l Menu32
  2258.  dc.w 0,0
  2259.  dc.w 96,10
  2260.  dc.w $153
  2261.  dc.l 0
  2262.  dc.l Menu31Name
  2263.  dc.l 0
  2264.  dc.b 0
  2265.  even
  2266.  dc.l 0
  2267.  dc.w 0
  2268. Menu31Name:
  2269.  dc.b 2,0,2
  2270.  dc.w 0,0
  2271.  dc.l 0,Menu31Text,0
  2272. Menu31Text:
  2273.  dc.b '  Rainbow',0
  2274.  even
  2275. Menu32:
  2276.  dc.l Menu33
  2277.  dc.w 0,12
  2278.  dc.w 96,10
  2279.  dc.w $53
  2280.  dc.l 0
  2281.  dc.l Menu32Name
  2282.  dc.l 0
  2283.  dc.b 0
  2284.  even
  2285.  dc.l 0
  2286.  dc.w 0
  2287. Menu32Name:
  2288.  dc.b 2,0,2
  2289.  dc.w 0,0
  2290.  dc.l 0,Menu32Text,0
  2291. Menu32Text:
  2292.  dc.b '  Green-Blue',0
  2293.  even
  2294. Menu33:
  2295.  dc.l 0
  2296.  dc.w 0,24
  2297.  dc.w 96,10
  2298.  dc.w $53
  2299.  dc.l 0
  2300.  dc.l Menu33Name
  2301.  dc.l 0
  2302.  dc.b 0
  2303.  even
  2304.  dc.l 0
  2305.  dc.w 0
  2306. Menu33Name:
  2307.  dc.b 2,0,2
  2308.  dc.w 0,0
  2309.  dc.l 0,Menu33Text,0
  2310. Menu33Text:
  2311.  dc.b '  Red-Blue',0
  2312.  even
  2313.  
  2314. MinX:
  2315.  dc.b '-2',0,'      ',0
  2316. MaxX:
  2317.  dc.b '2',0,'       ',0
  2318. MinY:
  2319.  dc.b '-2',0,'      ',0
  2320. MaxY:
  2321.  dc.b '2',0,'       ',0   
  2322. AA:
  2323.  dc.b '0',0,'       ',0
  2324. OO:
  2325.  dc.b '1',0,'       ',0
  2326. SoundOfTwo:
  2327.  dc.b ' 2',0,'      ',0
  2328.  even
  2329. RealMinX:
  2330.  dc.l Realm2
  2331. RealMaxX:
  2332.  dc.l Real2
  2333. RealMinY:
  2334.  dc.l Realm2
  2335. RealMaxY:
  2336.  dc.l Real2
  2337.  
  2338. ZoomFlag:
  2339.  dc.b 0
  2340. OSCenter:
  2341.  dc.b 0
  2342. JuliaFlag:
  2343.  dc.b 0
  2344. SmallFlag:
  2345.  dc.b 0 
  2346. ColorFlag:
  2347.  dc.b 0
  2348.  even
  2349.  
  2350. PolyTable:
  2351.  dc.w 0,0,0,0            
  2352.  
  2353. CoefTransX:
  2354.  dc.l 0
  2355. CoefTransY:
  2356.  dc.l 0
  2357.  
  2358. ScrMinX:
  2359.  dc.l 120
  2360. ScrMinY:
  2361.  dc.l 65
  2362. ScrMaxX:
  2363.  dc.l 200
  2364. ScrMaxY:
  2365.  dc.l 115
  2366. RealXSize:
  2367.  dc.l Real80
  2368. RealYSize:
  2369.  dc.l Real50
  2370. RealAA:
  2371.  dc.l 0
  2372. RealOO:
  2373.  dc.l $80000041 
  2374. RealR:
  2375.  dc.l 0
  2376. RealI:
  2377.  dc.l 0
  2378. ZoomMinX:
  2379.  dc.l 0
  2380. ZoomMinY:
  2381.  dc.l 0
  2382. ZoomMaxX:
  2383.  dc.l 0
  2384. ZoomMaxY:
  2385.  dc.l 0   
  2386.  
  2387. sILBM_Buffer:
  2388.  dc.l 0
  2389. sILBM_PlanePtr:
  2390.  dc.l 0,0,0,0,0
  2391. sILBM_Depth:
  2392.  dc.w 0
  2393. sILBM_BytesPerRow:
  2394.  dc.w 0
  2395. sILBM_Lock:
  2396.  dc.l 0
  2397.  
  2398. Palette1:
  2399.  dc.w $000,$f00,$f30,$f60,$f90,$fc0,$ff0,$cf0
  2400.  dc.w $9f0,$6f0,$3f0,$0f0,$0f3,$0f6,$0f9,$0fc
  2401.  dc.w $0ff,$0cf,$09f,$06f,$03f,$00f,$30f,$60f
  2402.  dc.w $90f,$c0f,$f0f,$c0c,$909,$606,$303,$000
  2403. Palette2:
  2404.  dc.w $000,$00f,$13f,$15f,$27f,$38f,$3af,$4cf
  2405.  dc.w $5df,$5ef,$6ff,$5fe,$5fc,$4fb,$3f9,$2f7
  2406.  dc.w $2f5,$1f2,$0f0,$0e0,$0d0,$0c0,$0b0,$0a0
  2407.  dc.w $090,$080,$070,$060,$050,$040,$030,$020
  2408. Palette3:
  2409.  dc.w $000,$00f,$31f,$51f,$72f,$83f,$a3f,$c4f
  2410.  dc.w $d5f,$e5f,$f6f,$f5e,$f5c,$f4b,$f39,$f27
  2411.  dc.w $f25,$f12,$f00,$e00,$d00,$c00,$b00,$a00
  2412.  dc.w $900,$800,$700,$600,$500,$400,$300,$200
  2413.  even  
  2414.  
  2415.  SECTION Vide,BSS
  2416.  
  2417. sILBM_Name:
  2418.  ds.b 200
  2419. Buffer:
  2420.  ds.b 60
  2421. FileNameBuffer:
  2422.  ds.b 80
  2423. DirNameBuffer:
  2424.  ds.b 120
  2425.  
  2426.  END
  2427.  
  2428.  
  2429.